package com.gupao.edu.nio.buffer;

import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.util.Arrays;

/**
 * @description：
 * @author：huabin.lin@xhmh.com
 * @version：2018年11月04日 21:35
 */
public class BufferDemo {

    public static void main(String[] args) throws UnsupportedEncodingException {
        BufferDemo buffer = new BufferDemo();
        buffer.decode("咕泡学院");
        buffer.encode("咕泡学院");
    }

    /***
     * 解码器
     * @param str
     * @throws UnsupportedEncodingException
     */
    public void decode(String str) throws UnsupportedEncodingException {
        ByteBuffer byteBuffer = ByteBuffer.allocate(128);
        byteBuffer.put(str.getBytes("UTF-8"));
        // 开启写模式，从头开始写数据
        byteBuffer.flip();

        // 获取UTF-8的编码解码器
        Charset utf8 = Charset.forName("UTF-8");
        // 对 ByteBuffer 中的内容解码
        CharBuffer charBuffer = utf8.decode(byteBuffer);

        // array()返回的就是内部的数组引用，编码以后的有效长度是0 ~ limit
        char[] charArr = Arrays.copyOf(charBuffer.array(), charBuffer.limit());
        System.out.println(charArr);
    }

    /***
     * 编码器
     * @param str
     * @throws UnsupportedEncodingException
     */
    public void encode(String str) throws UnsupportedEncodingException {
        CharBuffer charBuffer = CharBuffer.allocate(128);
        charBuffer.append(str);
        // 开启写模式，从头开始写数据
        charBuffer.flip();

        // 获取UTF-8的编码解码器
        Charset utf8 = Charset.forName("UTF-8");
        // 对 CharBuffer 中的内容编码
        ByteBuffer byteBuffer = utf8.encode(charBuffer);

        // array()返回的就是内部的数组引用，编码以后的有效长度是0 ~ limit
        byte[] bytes = Arrays.copyOf(byteBuffer.array(), byteBuffer.limit());
        System.out.println(Arrays.toString(bytes));
    }
}
